
#include <16f648a.h>            //pic a utilizar          
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador 
#use delay (clock=4000000)         //Fosc=4Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd
      
///PROGRAMA
void main(void)
{
   char tabNum[10]={'0','1','2','3','4','5','6','7','8','9'},i=0,j=0,h=0,g=0,z=0;   //tabla y variable definida
      
   lcd_init();         //inicializa lcd
   printf(lcd_putc,"contador de\n00000 a 99999");   //muestra mensaje inicio

   do{                     //espera hasta que se pulse boton...
   }while(input(PIN_A0)==1);
   printf(lcd_putc,"\f");      //...para borrar pantalla e iniciar contador
   
   printf(lcd_putc,"\n\t\tJavier Pina F.");   //auto publicidad en la 2fila lcd
   lcd_gotoxy(8,1);                  //vuelve 1fila lcd y apunta la mitad de la columna
   
   for(;;){                     //bucle...
      if(!input(PIN_A0)){                  //se ha pulsado el boton?
         do{                           //SI -> eliminar...            
         }while(!input(PIN_A0));            //...rebotes del boton
         if(i>9){                     //se ha mostrado digito 9?
            i=0; //SI -> restaura valor indice(para mostrar digito 0)
            j++;
            if(j>9){J=0;
            h++;}
            if(h>9){h=0;
            g++;}
            if(g>9){g=0;
            z++;}
            if(z>9){z=0;}
            output_high(PIN_B3);         //activa buzzer(beep)
            delay_ms(50);               //tiempo de escucha del beep
            output_low(PIN_B3);            //desactiva buzzer(beep)
            }
         printf(lcd_putc,"%c%c%c%c%c",tabNum[z],tabNum[g],tabNum[h],tabNum[j],tabNum[i]);   //muestra por pantalla el numero
         printf(lcd_putc,"\b\b\b\b\b"); //retrasa el cursor una posicion(escribe encima)
         
         i++;                        //incremento contador indice tabNum
         }         
      }                     //...infinito
}